package io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class IODemo7 {
    public static void main(String[] args) throws IOException {
        //写法1
        /*InputStream inputStream=null;
        try {
            //打开文件
            inputStream=new FileInputStream("./test.txt");
            //其他逻辑代码
        }finally {
            //关闭文件
            inputStream.close();
        }*/

        //写法2--try操作还提供了一个版本，try with resources
        //把资源的释放/文件的关闭交给try with resources来负责
        //一旦代码出了try代码块，此时try自动帮我们调用inputStream的close
        //注意，实现了Closeable接口的类才能放在try()里面
        try(InputStream inputStream=new FileInputStream("./test.txt")) {
            //读文件
            byte[] buffer=new byte[1024];
            inputStream.read(buffer);
        }

        try(InputStream inputStream=new FileInputStream("./test.txt")) {
            //读文件,一次读一个字节，也不知道文件有多少字节，用while来完成
            while(true){
                //一次读一个字节
                /*int b=inputStream.read();
                if (b == -1) {
                    //文件读取完毕
                    break;
                }
                //16进制打印这个字节的数据
                System.out.printf("%x",b);*/

                //一次读多个字节
                byte[] buffer=new byte[1024];
                //buffer表示“缓冲区”，往往是一个内存空间，读文件，就是把硬盘数据读到内存中
                int n=inputStream.read(buffer);
                if(n==-1){
                    //文件读取完毕了
                    break;
                }
                for (int i = 0; i < n; i++) {
                    System.out.printf("%x ",buffer[i]);
                }
            }
        }
    }
}
